package org.dromara.pay.adapter;

import cn.hutool.json.JSONObject;
import org.dromara.pay.constant.PayWaysConstant;
import org.dromara.pay.domain.request.PayParam;

import java.math.BigDecimal;

/**
 * 支付功能 目标接口
 *
 * @author zlj
 * @since 2023/7/28
 */
public interface PayAdapter {

    /**
     * 是否支持此类型支付
     *
     * @param adapter 支付类型 {@link PayWaysConstant}
     */
    boolean support(String adapter);

    /**
     * 支付
     *
     * @param payParam 支付参数
     * @return 唤起支付参数
     */
    JSONObject pay(PayParam payParam);

    /**
     * 发起退款
     *
     * @param topUpId  订单编号
     * @param totalFee 支付总金额
     * @return true:成功 false:失败
     */
    boolean refund(Long topUpId, BigDecimal totalFee);
}
